package cn.scnu.service;

import cn.scnu.common.model.PaginationData;
import cn.scnu.model.dto.*;
import cn.scnu.model.entity.ProjectAcceptanceEntity;
import cn.scnu.model.enums.TableNameEnum;
import cn.scnu.model.query.FuzzySearchQueryParam;
import cn.scnu.model.query.GetDataQueryParam;
import cn.scnu.model.query.MonthCountQueryParam;
import cn.scnu.model.query.ProjectResultQueryParam;
import com.baomidou.mybatisplus.extension.service.IService;
import lombok.SneakyThrows;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author hqzqaq
 * @since 2024-11-22
 */
public interface IProjectAcceptanceService extends IService<ProjectAcceptanceEntity> {
    Double getJdmjCount();

    Double getZjzmjCount();

    Double getJzgdCount();

    @SneakyThrows
    <T> PaginationData<T> getProjectResultPage(ProjectResultQueryParam queryParam);

    List<String> getFwgnList(String fwgn);

    List<String> getJzjgList();

    List<String> getSearchList(FuzzySearchQueryParam fuzzySearchQueryParam);

    Map<String, String> getTableColumns();

    List<BaiYunRegionAttrDTO> getBaiyunAttr();

    String getWktForSmid(TableNameEnum tableName, Integer smid);

    List<String> getWktForSmids(TableNameEnum tableName, List<Integer> smids);

    List<String> getWktForUploadShp(MultipartFile shpFile);

    void exportProjectResultExcel(ProjectResultQueryParam queryParam, HttpServletResponse response);

    ProjectResultIndexDTO getProjectResultIndex(ProjectResultQueryParam queryParam);

    List<BaiYunRegionCountDTO> getCountByDistrict(ProjectResultQueryParam queryParam);

    List<ZjzmjMonthDTO> getMonthCountForZjzmj(MonthCountQueryParam year);

    List<DsMonthDTO> getMonthCountForDs(MonthCountQueryParam year);

    List<ZygnGroupCountDTO> getZygnGroupCount(ProjectResultQueryParam queryParam);

    List<ZjzmjCountGroupByLgDTO> getZjzmjCountGroupByLg(ProjectResultQueryParam queryParam);

    List<ZjzmjCountGroupByCsDTO> getZjzmjCountGroupByCs(ProjectResultQueryParam queryParam);

    List<Integer> getYearsForWcsj(ProjectResultQueryParam queryParam);

    List<BaseKeyValueDTO> getProjectRangeGeometry(ProjectResultQueryParam queryParam);

    <T> T getDataForSmid(GetDataQueryParam queryParam);

    List<Double> getMasterPlanStatistics(ProjectResultQueryParam queryParam);

    List<MasterPlanMonthDTO> getMasterPlanMonthStatistics(MonthCountQueryParam queryParam);

    List<MasterPlanDKCountDTO> getMasterPlanCountByDistrict(ProjectResultQueryParam queryParam);

    List<BaseKeyValueDTO<String, Integer>> getAirportHeightRestrictionAnalysis(ProjectResultQueryParam queryParam);
}
